package crons;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.logging.Level;
import java.util.logging.Logger;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import data.CountData;

import models.DealModel;
import admin.data.DealData;

@SuppressWarnings("serial")
public class CronChangeStatusDeal extends HttpServlet {

	private static final Logger log = Logger
			.getLogger(CronChangeStatusDeal.class.getName());

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws IOException, ServletException {
		log.setLevel(Level.FINE);

		/*
		 * Trạng thái: 0: Chưa kích hoạt ( Deal được tạo nhưng chưa kích hoạt
		 * giờ chạy deal để lên deal) 1: Đang kích hoạt ( deal đã được kích hoạt
		 * để chạy) 2: Đang chạy (Deal đang chạy trên site chủ) 3: Đã kết thuc
		 * hoàn thành ( Deal đã hết hạn chạy trên trang chủ và ẩn) 4: Đã khóa (
		 * Deal ko còn giao hàng chờ thanh lý) 5: Đã hoàn thành ( Deal đã thanh
		 * lý)
		 */

		// Chuyển trạng thái đang kích hoạt sang trạng thái đang chạy
		DealModel deal = new DealModel();
		DealData dealData = new DealData();
		ArrayList<DealModel> deals = dealData.getDealActive();
		for (int i = 0; i < deals.size(); i++) {
			deal = deals.get(i);
			if (deal.getStatus() == 1
					&& deal.getEndTime().getTime() > Calendar.getInstance()
							.getTime().getTime()) {
				deal.setStatus(2);
				DealData.insert(deal);

				log.info("Change status deal to running(2) with dealId : "
						+ deal.getDealId());
				response.getWriter().println(
						"Change status deal to running(2) with dealId : "
								+ deal.getDealId());
			}
		}

		// Chuyển trạng thái đang chạy sang trạng thái đã kết thúc hoàn thành
		ArrayList<DealModel> runningDeals = dealData.getDealRunning();
		for (int i = 0; i < runningDeals.size(); i++) {
			deal = runningDeals.get(i);
			if (deal.getStatus() == 2) {
				deal.setStatus(3);
				DealData.insert(deal);
				log.info("Change status deal from running(2) to finish(3) with dealId : "
						+ deal.getDealId());
				response.getWriter().println(
						"Change status deal from running(2) to finish(3) with dealId : "
								+ deal.getDealId());
			}
		}
		CountData countData = new CountData();
		countData.recountAll();
		response.getWriter().println("run success");
	}
}
